//2840. 判断通过操作能否让字符串相等 II
//思路：我们可以对奇数位和偶数位分别记下来
//i为奇数时，odd[s1[i]-'a']--, odd[s2[i]-'a']++
//i为偶数时，even[s1[i]-'a']--, even[s2[i]-'a']++
//最后遍历两个数组，如果两个数组的元素都是0的话就可以
//原因是，j-i为偶数，只有奇数-奇数/偶数-偶数，才是偶数，只要是偶数都可以两两交换
//这样的话奇偶数位分开，s1中奇数位出现的s2都出现了，偶数位也是如此的话，就说明可以让字符串相等

#include <string>
#include <vector>
using namespace std;

class Solution 
{
public:
    bool checkStrings(string s1, string s2) 
    {
        vector <int> odd(26, 0), even(26, 0);
        for(int i = 0; i < s1.size(); i++)
        {
            if(i % 2 != 0)
            {
                even[s1[i]-'a']--;
                even[s2[i]-'a']++;
            }
            else
            {
                odd[s1[i]-'a']--;
                odd[s2[i]-'a']++;
            }
        }
        for(int i = 0; i < 26; i++)
        {
            if(odd[i] != 0 || even[i] != 0) return false;
        }
        return true;
    }
};